entry: Move spinbutton size hack
authorBenjamin Otte <otte@redhat.com>
Mon, 25 Jan 2016 14:42:18 +0000 (15:42 +0100)
committerBenjamin Otte <otte@redhat.com>
Mon, 25 Jan 2016 14:49:17 +0000 (15:49 +0100)
If we want to do special sizing for the text, we need to do it for the
text. Otherwise paddings, borders and entyr icons will screw up
everything.

gtk/gtkentry.c
gtk/gtkentryprivate.h
gtk/gtkspinbutton.c

index f4335eb2628b04b5ac7f793c6354aa4bbb315d9d..4e1687094119b2eeaa3178ebb5dc78e6aadffc4b 100644 (file)
  * .insertion-cursor.
  */
 
-
 #define MIN_ENTRY_WIDTH  150
 
 #define MAX_ICONS 2
@@ -3509,12 +3508,19 @@ gtk_entry_measure (GtkCssGadget   *gadget,
       char_pixels = (MAX (char_width, digit_width) + PANGO_SCALE - 1) / PANGO_SCALE;
 
       if (priv->width_chars < 0)
-        min = MIN_ENTRY_WIDTH;
+        {
+          if (GTK_IS_SPIN_BUTTON (entry))
+            min = gtk_spin_button_get_text_width (GTK_SPIN_BUTTON (entry));
+          else
+            min = MIN_ENTRY_WIDTH;
+        }
       else
-        min = char_pixels * priv->width_chars;
+        {
+          min = char_pixels * priv->width_chars;
+        }
 
       if (priv->max_width_chars < 0)
-        nat = MIN_ENTRY_WIDTH;
+        nat = min;
       else
         nat = char_pixels * priv->max_width_chars;
 
index bc5e248748cb9e4225db86f14f1435a9257ed113..53a90785d6e2ccc8360dc7cb24beb510a4695968 100644 (file)
@@ -24,6 +24,7 @@
 #include <gtk/gtkentrycompletion.h>
 #include <gtk/gtkentry.h>
 #include <gtk/gtkcssgadgetprivate.h>
+#include <gtk/gtkspinbutton.h>
 
 G_BEGIN_DECLS
 
@@ -91,6 +92,9 @@ GtkCssGadget* gtk_entry_get_gadget         (GtkEntry  *entry);
 void     _gtk_entry_grab_focus             (GtkEntry  *entry,
                                             gboolean   select_all);
 
+/* in gtkspinbutton.c (because I'm too lazy to create gtkspinbuttonprivate.h) */
+gint     gtk_spin_button_get_text_width    (GtkSpinButton *spin_button);
+
 G_END_DECLS
 
 #endif /* __GTK_ENTRY_PRIVATE_H__ */
index 3b619a74b12ad4acbe5c9f1863a0d78c50498118..dc39e3820ac9c8fd589db92992e21d6a7afb54bc 100644 (file)
@@ -1185,45 +1185,45 @@ gtk_spin_button_format_for_value (GtkSpinButton *spin_button,
   return buf;
 }
 
-static void
-gtk_spin_button_get_preferred_width (GtkWidget *widget,
-                                     gint      *minimum,
-                                     gint      *natural)
+gint
+gtk_spin_button_get_text_width (GtkSpinButton *spin_button)
 {
-  GtkSpinButton *spin_button = GTK_SPIN_BUTTON (widget);
   GtkSpinButtonPrivate *priv = spin_button->priv;
-  GtkEntry *entry = GTK_ENTRY (widget);
+  gint width, w;
+  PangoLayout *layout;
+  gchar *str;
 
-  GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->get_preferred_width (widget, minimum, natural);
+  layout = pango_layout_copy (gtk_entry_get_layout (GTK_ENTRY (spin_button)));
 
-  if (gtk_entry_get_width_chars (entry) < 0)
-    {
-      gint width, w;
-      PangoLayout *layout;
-      gchar *str;
+  /* Get max of MIN_SPIN_BUTTON_WIDTH, size of upper, size of lower */
+  width = MIN_SPIN_BUTTON_WIDTH;
 
-      layout = pango_layout_copy (gtk_entry_get_layout (entry));
+  str = gtk_spin_button_format_for_value (spin_button,
+                                          gtk_adjustment_get_upper (priv->adjustment));
+  w = measure_string_width (layout, str);
+  width = MAX (width, w);
+  g_free (str);
 
-      /* Get max of MIN_SPIN_BUTTON_WIDTH, size of upper, size of lower */
-      width = MIN_SPIN_BUTTON_WIDTH;
+  str = gtk_spin_button_format_for_value (spin_button,
+                                          gtk_adjustment_get_lower (priv->adjustment));
+  w = measure_string_width (layout, str);
+  width = MAX (width, w);
+  g_free (str);
 
-      str = gtk_spin_button_format_for_value (spin_button,
-                                              gtk_adjustment_get_upper (priv->adjustment));
-      w = measure_string_width (layout, str);
-      width = MAX (width, w);
-      g_free (str);
+  g_object_unref (layout);
 
-      str = gtk_spin_button_format_for_value (spin_button,
-                                              gtk_adjustment_get_lower (priv->adjustment));
-      w = measure_string_width (layout, str);
-      width = MAX (width, w);
-      g_free (str);
+  return width;
+}
 
-      *minimum = width;
-      *natural = width;
+static void
+gtk_spin_button_get_preferred_width (GtkWidget *widget,
+                                     gint      *minimum,
+                                     gint      *natural)
+{
+  GtkSpinButton *spin_button = GTK_SPIN_BUTTON (widget);
+  GtkSpinButtonPrivate *priv = spin_button->priv;
 
-      g_object_unref (layout);
-    }
+  GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->get_preferred_width (widget, minimum, natural);
 
   if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
     {